package m.toolkit.codegenerator;

import java.util.ArrayList;
import java.util.List;

import m.framework.ClassType;
import m.framework.utils.ClassUtil;
import m.framework.utils.StringUtil;

public enum GeneratFileType {
	controller,service,model,dto,enums,testcase,
	index("首页"),query("查询结果"),prepareInsert("新增界面"),
	prepareUpdate("修改界面"),view("查看详情");

	public static final String classDir=Config.CLASS_DIR;
	public static final String pageDir=Config.PAGE_DIR;
	private String text;
	GeneratFileType(String text){
		this.text=text;
	}
	GeneratFileType(){
		this.text=this.toString();
	}
	public String getText() {
		return text;
	}
	
	/**生产的是否是class*/
	public boolean isClass(){
		return this.classType()!=null;
	}
	
	public String template(){
		return Config.TEMPLATE_DIR+"/"+this.toString()+".vm";
	}
	
	public ClassType classType(){
		GeneratFileType[] gt=new GeneratFileType[]{
			controller,service,dto,model,testcase
		};
		for(GeneratFileType g:gt){
			if(this==g){
				return ClassUtil.getField(ClassType.class, this.toString());
			}
		}
		return null;
	}
	
	public String fileName(String projectRoot, String pkg, String modelName) {
		if(isClass()){
			return this.dir(projectRoot, pkg, modelName)+"/"+StringUtil.firstUp(modelName)+this.classType().getPostfix()+".java";
		}
		return this.dir(projectRoot, pkg, modelName)+"/"+this.toString()+".jsp";
	}
	
	public String dir(String projectRoot, String pkg, String modelName){
		if(this.isClass()){
			String dir=projectRoot+classDir+"/"+pkg.replace('.', '/')+"/"+classType().getPackage();
			if(this==testcase){
				return dir.replaceFirst("main", "test");
			}
			return dir;
		}else{
			return projectRoot+pageDir+"/"+pkg.replace('.', '/')+"/"+modelName;
		}
	}
	public static List<GeneratFileType> allClass() {
		List list=new ArrayList();
		for(GeneratFileType t:GeneratFileType.values()){
			if(t.isClass()){
				list.add(t);
			}
		}
		return list;
	}
}
